import type { AxiosRequestConfig } from 'axios'
import type { AxiosTransform } from './axios-transform'

export interface RequestOptions {
  // 接口地址，不填则使用默认 apiUrl
  apiUrl?: string,
  // 是否添加时间戳
  joinTime?: boolean,
  // 是否携带 token
  withToken?: boolean,
  // 忽略重复请求
  ignoreCancelToken?: boolean,
  // 是否返回原生响应头
  isReturnNativeResponse?: boolean,
  // 不进行任何处理，直接返回
  isTransformResponse?: boolean,
  // 是否显示提示信息
  isShowMessage?: boolean,
  // 是否显示成功信息
  isShowSuccessMessage?: boolean,
  // 成功的文本信息
  successMessageText?: string,
  // 是否显示失败信息
  isShowErrorMessage?: boolean,
  // 错误的文本信息
  errorMessageText?: string,
}

export interface CreateAxiosOptions extends AxiosRequestConfig {
  transform?: AxiosTransform,
  requestOptions?: RequestOptions,
  // 权限的前缀
  authenticationScheme?: string,
}

// 上传文件
export interface UploadFileParams {
  // 文件参数接口字段名
  name?: string,
  // 文件
  file: File | Blob,
  // 文件名称
  filename?: string,
  // 其他参数
  data?: Recordable,
  [key: string]: any,
}

export interface Result<T = any> {
  code: number,
  type?: 'success' | 'error' | 'warning',
  message: string,
  result?: T,
}
